> ".$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; } ?>