> ".$jstatus['jpath']."/etc/hosts \n"; $cmd.="echo 'hostname=\"".$jail['jname']."\"' > ".$jstatus['jpath']."/etc/rc.conf \n"; if(is_array($jconfig['row'])) { foreach($jconfig['row'] as $_row) { $cmd.="echo '".$_row['rcconfline']."' >> ".$jstatus['jpath']."/etc/rc.conf \n"; #$cmd.="echo '".str_replace(' ', "\n", $jconfig['jrcconf'])."' >> ".$jstatus['jpath']."/etc/rc.conf \n"; } } $cmd.="echo 'domain ".$jstatus['jhostname'][1]."' > ".$jstatus['jpath']."/etc/resolv.conf \n"; foreach(explode(' ', trim($jconfig['jdnsservers'])) as $_ns) { $cmd.="echo 'nameserver ".str_replace(' ', "\nnameserver ", $_ns)."' >> ".$jstatus['jpath']."/etc/resolv.conf \n"; } return $cmd; } function jailctl_create_template($jail, $jstatus, $jconfig) { $mounts=$GLOBALS['jailctl_tmp']['mounts']; $unionmounts=$GLOBALS['jailctl_tmp']['unionmounts']; $mount_unionfs=$GLOBALS['jailctl_tmp']['mount_unionfs']; $mount_nullfs=$GLOBALS['jailctl_tmp']['mount_nullfs']; $_path=$jstatus['jpath']; $_name=$jail['name']; $_ip=$jail['jip']; $_hostname=$jstatus['jhostname']; $_dnsservers=$jconfig['jdnsservers']; $_passwd=$jconfig['jpasswd']; $_template=$jail['jtemplates']; exec('mkdir -p '.$_path.'/dev'); exec('mkdir -p '.$_path.'/root'); exec('ln -s /usr/home '.$_path.'/home'); $jail['juse_unionfs']=='on' ? $mount=$mount_unionfs : $mount=$mount_nullfs ; foreach($mounts as $mp) { $cmd[]='mkdir -p '.$_path.'/'.$mp; $cmd[]=$mount.' '.$_template.'/'.$mp.' '.$_path.'/'.$mp; } foreach($unionmounts as $mp) { $cmd[]='mkdir -p '.$_path.'/'.$mp; $cmd[]=$mount_unionfs.' '.$_template.'/'.$mp.' '.$_path.'/'.$mp; } foreach($cmd as $_t) { # exec($_t.' 2>&1 ', $_mount); exec($_t.' 2>&1 '); } # foreach($_mount as $_out) { # echo $_out."
"; # } $cmd=jailctl_initialize_jail($jail, $jstatus, $jconfig); $fd=fopen('/tmp/jcreate_'.$jail['jname'], 'w+'); fwrite($fd, $cmd); fclose($fd); exec("sh /tmp/jcreate_".$jail['jname']." 2>&1 >/var/log/jcreate_exec &"); foreach(array_reverse($mounts, true) as $mp) { exec('umount -f '.$_path.'/'.$mp); } foreach(array_reverse($unionmounts, true) as $mp) { exec('umount -f '.$_path.'/'.$mp); } } function jailctl_create_sysinstall($jail, $jstatus, $jconfig) { exec('mkdir -p '.$jstatus['jpath']); $cmd="sysinstall "; $cmd.="_ftpPath=".$jconfig['jftpmirror']." "; $cmd.="nonInteractive=yes "; $cmd.="mediaSetFTP "; $cmd.="releaseName=7.1-RELEASE "; if($jail['jdists']) { $cmd.="dists=\"base ".str_replace(',', ' ', $jail['jdists'])."\" "; $cmd.="distSetCustom "; } else { $cmd.=$jail['jdistset']." "; } $cmd.="installRoot=".$jstatus['jpath']." "; $cmd.="installCommit "; $cmd.="> /var/log/jcreate.log 2>/var/log/jcreate.err \n"; $cmd.="\n"; $cmd.=jailctl_initialize_jail($jail, $jstatus, $jconfig); $fd=fopen('/tmp/jcreate_'.$jail['jname'], 'w+'); fwrite($fd, $cmd); fclose($fd); exec("sh /tmp/jcreate_".$jail['jname']." 2>&1 >/var/log/jcreate_exec &"); } function jailctl_find_if($ip) { exec("ifconfig | grep -C 1 '".addcslashes($ip, ".")."'", $_ifconfig); $if=explode(':', $_ifconfig[0]); return $if[0]; } function jailctl_addinterfaces($config) { $vips=$config['virtualip']['vip']; ?> "); print_r($jail); echo(""); $jname=$jail['jname']; $jhostname=explode('.', $jname, 2); $jpath=$jconfig['jstorage']."/".$jname; $jip=$jail['jip']; $jif=$jail['jif']; if(is_ipaddr($jif)) { $jrealif=jailctl_find_if($jif); #$jrealif=guess_interface_from_ip($jif); #$jrealif=link_carp_interface_to_parent($jif); } else { $jrealif=$config['interfaces'][$jif]['if']; } if($config['interfaces'][$jif]['descr']) { $jifdesc=$config['interfaces'][$jif]['descr']; } elseif(is_ipaddr($jif)) { $vips=$config['virtualip']['vip']; foreach($vips as $vip) { if($vip['mode']=='carp' and $vip['subnet']==$jif) { $jifdesc='CARP on '.strtoupper($vip['interface']); } } } else { $jifdesc=strtoupper($jail['jif']); } $_out=Array(); exec('ps axwww | grep "sysinstall.*'.$jname.'" | grep -v grep', $_out); if(count($_out)) { $jstate='Building'; } else { $_out=Array(); exec('/usr/local/sbin/jailctl status '.$jname, $_out); #echo("
"); print_r($_out); echo("
"); if (substr($_out[0], 0, strlen($jname))==$jname) { $_tmp=Array(); ereg("is (.*)\.", array_shift($_out), $_tmp); switch ($_tmp[1]) { case 'down': $jstate='Stopped'; break; case 'up': $jstate='Running'; break; default: $jstate='Undefined'; break; } } else { $jstate='New'; } } $jstatus['jstate']=$jstate; $jstatus['jpath']=$jpath; $jstatus['jrealif']=$jrealif; $jstatus['jifdesc']=$jifdesc; $jstatus['jhostname']=$jhostname; return $jstatus; } ?>