diff options
Diffstat (limited to 'config/freenas/pkg/freenas.inc')
-rw-r--r-- | config/freenas/pkg/freenas.inc | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/config/freenas/pkg/freenas.inc b/config/freenas/pkg/freenas.inc new file mode 100644 index 00000000..b87ebfe6 --- /dev/null +++ b/config/freenas/pkg/freenas.inc @@ -0,0 +1,297 @@ +<?php +/* $Id$ */ +/* ========================================================================== */ +/* + freenas.inc + part of pfSense (http://www.pfSense.com) + Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name> + All rights reserved. + + Based on FreeNAS (http://www.freenas.org) + Copyright (C) 2005-2006 Olivier Cochard-Labbé <olivier@freenas.org>. + All rights reserved. + + Based on m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>. + All rights reserved. + */ +/* ========================================================================== */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + */ +/* ========================================================================== */ + +require_once("freenas_config.inc"); + +function sync_package_freenas() { +} + +function oninstall_copy_kernel_binaries($action = "install") { + $binaries = array(); + $binaries[] = array("source" => "/usr/local/pkg/iscsi_initiator.ko", + "target" => "/boot/kernel/iscsi_initiator.ko", + "backup" => false); + $binaries[] = array("source" => "/usr/local/pkg/ext2fs.ko", + "target" => "/boot/kernel/ext2fs.ko", + "backup" => false); + $binaries[] = array("source" => "/usr/local/pkg/geom_concat.ko", + "target" => "/boot/kernel/geom_concat.ko", + "backup" => false); + $binaries[] = array("source" => "/usr/local/pkg/geom_gpt.ko", + "target" => "/boot/kernel/geom_gpt.ko", + "backup" => false); + $binaries[] = array("source" => "/usr/local/pkg/geom_mirror.ko", + "target" => "/boot/kernel/geom_mirror.ko", + "backup" => false); + $binaries[] = array("source" => "/usr/local/pkg/geom_stripe.ko", + "target" => "/boot/kernel/geom_stripe.ko", + "backup" => false); + $binaries[] = array("source" => "/usr/local/pkg/geom_vinum.ko", + "target" => "/boot/kernel/geom_vinum.ko", + "backup" => false); + $binaries[] = array("source" => "/usr/local/pkg/ntfs.ko", + "target" => "/boot/kernel/ntfs.ko", + "backup" => false); + $binaries[] = array("source" => "/usr/local/pkg/kernel.gz", + "target" => "/boot/kernel/kernel.gz", + "backup" => true); + + if ($action == "install") { + while (list(, $val) = each($binaries)) { + $static_output .= "FreeNAS: Moving binary file... "; + update_output_window($static_output); + if ($val['backup'] && file_exists($val['target'])) + rename($val['target'], "{$val['target']}.org"); + rename($val['source'], $val['target']); + $static_output .= "done.\n"; + update_output_window($static_output); + } + } else if ($action == "deinstall") { + while (list($source, $target) = each($binaries)) { + $static_output .= "FreeNAS: Removing binary file... "; + update_output_window($static_output); + unlink($target); + $static_output .= "done.\n"; + update_output_window($static_output); + } + } +} + +function remove_package_contents($pkg = "") { + if ($pkg == "") { return; } + + $pd = popen("pkg_info -rf {$pkg}", "r"); + + if (! pd) { return; } + + while (! feof($pd)) { + $buffer = fgets($pd, 4096); + + if (strpos($buffer, "File:") !== false) { + $file = trim(str_replace("File:", "", $buffer)); + + if (strpos($file, "man/") !== false) { + unlink_if_exists("/usr/local/{$file}"); + } else if (strpos($file, "share/doc/") !== false) { + unlink_if_exists("/usr/local/{$file}"); + } else if (strpos($file, "share/aclocal/") !== false) { + unlink_if_exists("/usr/local/{$file}"); + } else if (strpos($file, "include/") !== false) { + unlink_if_exists("/usr/local/{$file}"); + } else if (strpos($file, "libdata/pkgconfig/") !== false) { + unlink_if_exists("/usr/local/{$file}"); + } else if (strpos($file, "info/") !== false) { + unlink_if_exists("/usr/local/{$file}"); + } else if (strpos($file, "etc/rc.d/") !== false) { + unlink_if_exists("/usr/local/{$file}"); + } else if (strpos($file, "etc/") !== false) { + if (strpos($file, ".dist") !== false || + strpos($file, ".sample") !== false || + strpos($file, ".example") !== false || + strpos($file, ".default") !== false || + strpos($file, ".sh") !== false) { + unlink_if_exists("/usr/local/{$file}"); + } + } else if (strpos($file, "share/examples/") !== false) { + unlink_if_exists("/usr/local/{$file}"); + } + + /* What about locales? */ + /* + } else if (strpos($file, "share/local/") !== false) { + unlink_if_exists("/usr/local/{$file}"); + } + */ + } + } + + fclose ($pd); +} + +function adjust_package_contents() { + remove_package_contents("avahi+libdns-0.6.12"); + remove_package_contents("ataidle-0.9"); + remove_package_contents("perl-5.8.8"); + remove_package_contents("libiconv-1.9.2_2"); + remove_package_contents("libxml2-2.6.26"); + remove_package_contents("gettext-0.14.5_2"); + remove_package_contents("glib-2.10.3"); + remove_package_contents("expat-2.0.0_1"); + remove_package_contents("wzdftpd-0.7.2_1"); + remove_package_contents("e2fsprogs-1.39_1"); + remove_package_contents("smartmontools-5.36"); + remove_package_contents("aaccli-1.0"); + remove_package_contents("rsync-2.6.8_2"); + remove_package_contents("scponly-4.6_1"); + remove_package_contents("cracklib-2.7_2"); + remove_package_contents("samba-3.0.23,1"); + remove_package_contents("netatalk-2.0.3_3,1"); + remove_package_contents("pam_ldap-1.8.2"); +} + +function oninstall_copy_misc_binaries($action = "install") { + $binaries = array(); + $binaries[] = array("source" => "/usr/local/pkg/iscontrol", + "target" => "/usr/local/sbin/iscontrol"); + $binaries[] = array("source" => "/usr/local/pkg/nfsd", + "target" => "/usr/sbin/nfsd"); + $binaries[] = array("source" => "/usr/local/pkg/nfsd", + "target" => "/usr/sbin/mountd"); + $binaries[] = array("source" => "/usr/local/pkg/rpcbind", + "target" => "/usr/sbin/rpcbind"); + $binaries[] = array("source" => "/usr/local/pkg/rpc.lockd", + "target" => "/usr/sbin/rpc.lockd"); + $binaries[] = array("source" => "/usr/local/pkg/rpc.lockd", + "target" => "/usr/sbin/rpc.lockd"); + + if ($action == "install") { + while (list(, $val) = each($binaries)) { + $static_output .= "FreeNAS: Installing binary file... "; + update_output_window($static_output); + mwexec("install -s {$source} ${target}"); + $static_output .= "done.\n"; + update_output_window($static_output); + } + } else if ($action == "deinstall") { + while (list($val['source'], $val['target']) = each($binaries)) { + $static_output .= "FreeNAS: Removing binary file... "; + update_output_window($static_output); + unlink($target); + $static_output .= "done.\n"; + update_output_window($static_output); + } + } +} + +function oninstall_setup_config() { + global $config; + + $config['system']['zeroconf_disable'] = "yes"; + + $freenas_config =& $config['installedpackages']['freenas']['config'][0]; + + if (!is_array($freenas_config['disks'])) + $freenas_config['disks'] = array(); + if (!is_array($freenas_config['mounts'])) + $freenas_config['mounts'] = array(); + + if (!is_array($freenas_config['samba'])) + $freenas_config['samba'] = array(); + $freenas_config['samba']['netbiosname'] = "freenas"; + $freenas_config['samba']['workgroup'] = "WORKGROUP"; + $freenas_config['samba']['serverdesc'] = "pfSense Server"; + $freenas_config['samba']['security'] = "share"; + $freenas_config['samba']['localmaster'] = "yes"; + + if (!is_array($freenas_config['ftp'])) + $freenas_config['ftp'] = array(); + $freenas_config['ftp']['numberclients'] = "5"; + $freenas_config['ftp']['maxconperip'] = "2"; + $freenas_config['ftp']['timeout'] = "300"; + $freenas_config['ftp']['port'] = "21"; + $freenas_config['ftp']['anonymous'] = "yes"; + $freenas_config['ftp']['pasv_max_port'] = "0"; + $freenas_config['ftp']['pasv_min_port'] = "0"; + + if (!is_array($freenas_config['afp'])) + $freenas_config['afp'] = array(); + + if (!is_array($freenas_config['rsyncd'])) + $freenas_config['rsyncd'] = array(); + $freenas_config['rsyncd']['readonly'] = "no"; + $freenas_config['rsyncd']['port'] = "873"; + + if (!is_array($freenas_config['nfs'])) + $freenas_config['nfs'] = array(); +} + +function custom_php_install_command() { + global $g; + + oninstall_copy_kernel_binaries(); + oninstall_copy_misc_binaries(); + adjust_package_contents(); + oninstall_setup_config(); + + if (! file_exists("/usr/local/etc/rc.d")) + mwexec("mkdir -p /usr/local/etc/rc.d"); + + if (! file_exists("{$g['varrun_path']}/dbus")) + mkdir("{$g['varrun_path']}/dbus"); + + if (! file_exists("{$g['varrun_path']}/avahi-daemon")) + mkdir("{$g['varrun_path']}/avahi-daemon"); + + rename("/usr/local/pkg/rc.freenas", "/usr/local/etc/rc.d/freenas.sh"); + chmod ("/usr/local/etc/rc.d/freenas.sh", 0755); + + mwexec("ln -s /usr/local/etc/uams/uams_passwd.so /usr/local/etc/uams/uams_clrtxt.so"); + mwexec("ln -s /usr/local/etc/uams/uams_dhx_passwd.so /usr/local/etc/uams/uams_dhx.so"); + /* hack cause I linked netatalk against db44 instead of db42 */ + mwexec("ln -s /usr/local/lib/libdb-4.4.so.0 /usr/local/lib/libdb-4.2.so.2"); +} + +function custom_php_deinstall_command() { + global $config, $g; + + oninstall_copy_kernel_binaries("deinstall"); + oninstall_copy_misc_binaries("deinstall"); + + if (! file_exists("/usr/local/etc/rc.d")) + mwexec("rm -rf /usr/local/etc/rc.d"); + + if (! file_exists("{$g['varrun_path']}/dbus")) + mwexec("rm -rf {$g['varrun_path']}/dbus"); + + if (! file_exists("{$g['varrun_path']}/avahi-daemon")) + mwexec("rm -rf {$g['varrun_path']}/avahi-daemon"); + + unlink_if_exists("/usr/local/etc/uams/uams_clrtxt.so"); + unlink_if_exists("/usr/local/etc/uams/uams_dhx.so"); + unlink_if_exists("/usr/local/etc/rc.d/freenas.sh"); + unlink_if_exists("/usr/local/lib/libdb-4.2.so.2"); + + unset($config['installedpackages']['freenas']); + write_config(); + conf_mount_ro(); +} +?> |