FreeNAS Code
This project has moved to github - see https://github.com/freenas
Brought to you by:
cochard,
mattolander
#- # Copyright (c) 2010-2011 iXsystems, Inc., 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 BY THE AUTHOR AND CONTRIBUTORS ``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 iXsystems, Inc. OR CONTRIBUTORS 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. # # This file is heavily derived from both Sam Leffler's Avilia config, # as well as the BSDRP project's config file. Neither of these have # an explicit copyright/license statement, but are implicitly BSDL. # # # FreeNAS specific bits of the common stuff. # # Override the defaults in nanobsd.sh from a common script. . "$FREENAS_ROOT/build/nano_env" # Helpful functions. . "$FREENAS_ROOT/build/functions.sh" # DEBUG=1, MULTIMEDIA=1, etc. for feature in $SW_FEATURES; do eval "$(echo "$feature")=1" done NANO_BOOT0CFG="-o packet -s 1 -m 3 -t 18" NANO_RAM_TMPVARSIZE=$((160*1024)) NANO_IMAGES=2 FlashDevice generic 2g . ${NANO_CFG_BASE}/common add_port devel/pkg-config add_port devel/libpthread-stubs WITHOUT_X11=y add_port devel/cdialog add_port dns/inadyn # -mt? #+editors/nano add_port lang/perl5.12 add_port converters/libiconv add_port converters/iconv add_port devel/gettext #-editors/nano add_port editors/nano add_port ftp/proftpd add_port net-mgmt/bsnmp-ucd add_port net-mgmt/bsnmptools add_port net-mgmt/clog add_port net-mgmt/sipcalc add_port net/istgt add_port security/libgcrypt add_port security/libgpg-error add_port databases/db46 #+net/nss_ldap add_port security/cyrus-sasl2 add_port net/openldap24-sasl-client #-net/nss_ldap add_port net/nss_ldap add_port net/rsync WITHOUT_POPT_PORT=true WITH_SSH=true WITHOUT_ATIMES=true \ WITH_ACL=true WITHOUT_ICONV=true WITHOUT_TIMELIMIT=true add_port lang/python27 WITH_HUGE_STACK_SIZE=y add_port dns/py-dnspython #+net/samba add_port devel/talloc add_port devel/libexecinfo add_port devel/popt add_port databases/tdb add_port sysutils/libsunacl #-net/samba add_port net/samba35 WITHOUT_CUPS=y WITH_LDAP=y WITH_ADS=y WITH_WINBIND=y \ WITH_ACL_SUPPORT=y WITH_PAM_SMBPASS=y \ WITH_AIO_SUPPORT=y WITH_EXP_MODULES=y add_port security/pam_ldap add_port security/pam_mkhomedir add_port shells/bash WITHOUT_NLS=y add_port shells/scponly add_port sysutils/e2fsprogs #+sysutils/fusefs-ntfs add_port sysutils/fusefs-kmod add_port sysutils/fusefs-libs add_port devel/libublio #-sysutils/fusefs-ntfs add_port sysutils/fusefs-ntfs add_port sysutils/ntfsprogs add_port sysutils/smartmontools #+emulators/open-vm-tools-nox11 add_port devel/pcre add_port devel/glib20 add_port net/libdnet #-emulators/open-vm-tools-nox11 add_port emulators/open-vm-tools-nox11 WITHOUT_ICU=y add_port databases/sqlite3 add_port databases/py-sqlite3 add_port databases/py-bsddb3 add_port www/py-django WITHOUT_MYSQL=y add_port www/py-dojango #+databases/py-south add_port devel/py-setuptools #-databases/py-south add_port databases/py-south add_port devel/py-asn1 add_port devel/py-asn1-modules #+add_port www/lighttpd add_port www/spawn-fcgi #-add_port www/lighttpd add_port www/lighttpd #+add_port www/py-flup #-add_port www/py-flup add_port www/py-flup #+add_port sysutils/nut #-add_port sysutils/nut add_port net-mgmt/net-snmp add_port sysutils/nut WITHOUT_NEON=y add_port textproc/libxml2 WITHOUT_X11=y add_port textproc/py-libxml2 WITHOUT_X11=y add_port textproc/expat2 WITHOUT_X11=y add_port devel/gamin WITHOUT_X11=y add_port devel/gio-fam-backend WITHOUT_X11=y add_port devel/m4 WITHOUT_X11=y add_port devel/bison WITHOUT_X11=y add_port devel/libffi WITHOUT_X11=y add_port devel/gobject-introspection if [ "${REPORTING}" = 1 -o "${MULTIMEDIA}" = 1 ]; then add_port graphics/png WITHOUT_X11=y fi if [ "${REPORTING}" = 1 ]; then #+add_port net-mgmt/collectd add_port devel/libstatgrab WITHOUT_X11=y add_port devel/libltdl WITHOUT_X11=y add_port print/freetype2 WITHOUT_X11=y add_port x11/kbproto add_port x11/xproto WITHOUT_X11=y add_port x11/libXdmcp WITHOUT_X11=y add_port x11/libXau WITHOUT_X11=y add_port x11/libxcb WITHOUT_X11=y add_port x11/libX11 add_port x11-fonts/fontconfig WITHOUT_X11=y add_port x11-fonts/libfontenc WITHOUT_X11=y add_port x11-fonts/mkfontscale WITHOUT_X11=y add_port x11-fonts/mkfontdir WITHOUT_X11=y add_port x11-fonts/font-bh-ttf WITHOUT_X11=y add_port x11-fonts/font-misc-meltho WITHOUT_X11=y add_port x11-fonts/font-misc-ethiopic WITHOUT_X11=y add_port x11-fonts/bitstream-vera WITHOUT_X11=y add_port x11-fonts/font-util WITHOUT_X11=y add_port x11-fonts/encodings WITHOUT_X11=y add_port x11-fonts/xorg-fonts-truetype WITHOUT_X11=y add_port x11/xcb-util WITHOUT_X11=y add_port x11/libXrender add_port x11/renderproto add_port x11/xcb-proto WITHOUT_X11=y add_port x11/pixman WITHOUT_X11=y add_port graphics/png WITHOUT_X11=y add_port graphics/cairo WITHOUT_X11=y add_port x11-toolkits/pango WITHOUT_X11=y add_port databases/rrdtool WITHOUT_X11=y WITHOUT_PERL_MODULE=y \ WITH_PYTHON_MODULE=y add_port net/liboping WITHOUT_X11=y #-add_port net-mgmt/collectd add_port net-mgmt/collectd WITHOUT_BIND=y WITHOUT_SNMP=y WITHOUT_X11=y fi add_port devel/py-ipaddr add_port converters/base64 add_port emulators/mtools WITHOUT_X11=y add_port sysutils/arcconf add_port sysutils/tw_cli add_port net/py-ldap2 WITH_SASL=y add_port sysutils/ataidle add_port sysutils/gnome_subr add_port devel/dbus add_port devel/dbus-glib add_port devel/libdaemon add_port databases/gdbm add_port net/avahi-app add_port net/avahi-libdns add_port textproc/py-xml add_port sysutils/throttle add_port sysutils/dmidecode add_port sysutils/graid5 add_port devel/libevent add_port sysutils/tmux add_port net/netatalk WITH_PAM=y WITHOUT_APPLETALK=y #+add_port ftp/wget add_port dns/libidn #-add_port ftp/wget add_port ftp/wget add_port benchmarks/iozone add_port benchmarks/iperf if [ "${DEBUG}" = 1 -o "${MULTIMEDIA}" = 1 ]; then #+add_port devel/git || net-p2p/transmission-daemon add_port security/ca_root_nss WITH_ETCSYMLINK=y add_port ftp/curl #-add_port devel/git || net-p2p/transmission-daemon fi if [ "${MULTIMEDIA}" = 1 ]; then #+add_port audio/firefly || net/minidlna #add_port graphics/png WITHOUT_APNG=y #add_port devel/pkg-config add_port audio/libid3tag add_port audio/libogg add_port audio/libvorbis add_port audio/speex #-add_port audio/firefly || net/minidlna #+add_port audio/firefly add_port audio/libao add_port audio/vorbis-tools add_port multimedia/libkate #add_port databases/sqlite3 #-add_port audio/firefly || net/minidlna #+add_port net/minidlna #add_port converters/libiconv add_port multimedia/mp4v2 add_port audio/faac add_port audio/flac add_port audio/lame #add_port databases/sqlite3 add_port graphics/jpeg #add_port devel/gettext add_port graphics/libexif add_port audio/opencore-amr add_port graphics/opencv-core add_port multimedia/libtheora #add_port devel/yasm ? #add_port lang/perl5.12 #add_port shells/bash add_port devel/orc add_port multimedia/schroedinger add_port multimedia/gpac-libgpac WITHOUT_OPENGL=y add_port multimedia/x264 WITHOUT_ASM=y add_port multimedia/xvid WITHOUT_OPTIMIZED_CFLAGS=y #add_port multimedia/libvpx add_port multimedia/ffmpeg WITH_FAAC=y WITH_LAME=y WITH_SPEEX=y \ WITHOUT_FFSERVER=y WITHOUT_FREETYPE=y \ WITHOUT_VP8=y #-add_port net/minidlna add_port net/minidlna #+add_port net-p2p/transmission-daemon #add_port devel/pkg-config add_port devel/libevent2 add_port www/transmission-web #-add_port net-p2p/transmission-daemon add_port net-p2p/transmission-daemon fi if [ "${DEBUG}" = 1 ]; then add_port devel/apr1 add_port devel/py-logilab-common add_port devel/py-astng add_port devel/pylint add_port www/neon29 add_port devel/subversion add_port editors/vim-lite add_port misc/py-pexpect add_port devel/ipython add_port devel/p5-Term-ReadKey add_port devel/p5-subversion add_port mail/p5-Net-SMTP-SSL add_port lang/p5-Error add_port devel/git WITH_SVN=y WITHOUT_CVS=y WITHOUT_P4=y add_port devel/ctags fi if [ "${NANO_PACKAGE_ONLY}" -eq 1 ]; then CONF_INSTALL="${CONF_INSTALL} ${PKG_ONLY_MAKE_CONF} " echo "Automatically building a thin image with packages" else echo "Automatically building a * * F A T * * image so we can build ports" fi VARS="MASTER_SITE_BACKUP MASTER_SITE_OVERRIDE PACKAGEROOT PACKAGESITE" for var in $VARS; do val=$(eval echo "\$$var") if [ -n "$val" ]; then CONF_INSTALL="${CONF_INSTALL} $var=$val" fi done hack_nsswitch_conf ( ) { # Remove all references to NIS in the nsswitch.conf file # Not sure this is still needed, but FreeNAS has it... sed -i.bak -es/nis/files/g ${NANO_WORLDDIR}/etc/nsswitch.conf rm -f ${NANO_WORLDDIR}/etc/nsswitch.conf.bak } customize_cmd hack_nsswitch_conf default_root_password ( ) { CR "echo freenas | pw usermod root -h 0" } customize_cmd default_root_password add_gui() { local gui dst dstCR gui=${FREENAS_ROOT}/gui dstCR=/usr/local/www/freenasUI dst=${NANO_WORLDDIR}${dstCR} if [ -d ${gui} ]; then pprint 2 "Adding freenas web gui" mkdir ${dst} ( cd ${gui} find . -print | grep -Ev '/(CVS|\.svn)' | cpio -dumpv ${dst} ) pprint 2 "Making freenas initial database" mkdir ${NANO_WORLDDIR}/data CR "(cd ${dstCR}; python manage.py syncdb --noinput --migrate)" CR "(cd ${dstCR}; python manage.py createadmin --email root@freenas.local)" CR "(cd ${dstCR}; python manage.py compilemessages)" CR "(cd /data; cp freenas-v1.db factory-v1.db)" CR "ln -sf /etc/local_settings.py ${dstCR}/local_settings.py" CR "chown -R www:www ${dstCR} data" else pprint 2 "GUI OMITTED from image" fi } customize_cmd add_gui # Move the $world/data to the /data partion move_data() { db=${NANO_WORLDDIR}/data rm -rf ${NANO_DATADIR} mkdir -p ${NANO_DATADIR} ( cd ${db} ; find . | cpio -dumpv ${NANO_DATADIR} ) rm -rf ${db} } customize_cmd move_data add_data_to_fstab ( ) { ( cd ${NANO_WORLDDIR} echo "/dev/${NANO_DRIVE}s4 /data ufs rw,noatime 2 2" >> etc/fstab mkdir -p data ) } customize_cmd add_data_to_fstab afpd_conf_symlink ( ) { ln -sfh /etc/afpd.conf ${NANO_WORLDDIR}/usr/local/etc/afpd.conf } customize_cmd afpd_conf_symlink select_httpd ( ) { echo 'lighttpd_enable="YES"' >> ${NANO_WORLDDIR}/etc/rc.conf } customize_cmd select_httpd remove_patch_divots ( ) { find ${NANO_WORLDDIR} -name \*.orig -or -name \*.rej -delete } customize_cmd remove_patch_divots configure_mnt_md ( ) { mkdir -p ${NANO_WORLDDIR}/conf/base/mnt echo 2048 > ${NANO_WORLDDIR}/conf/base/mnt/md_size } customize_cmd configure_mnt_md save_build ( ) { VERSION_FILE=${NANO_WORLDDIR}/etc/version if [ "${SVNREVISION}" = "${REVISION}" ]; then echo "${NANO_NAME}" > "${VERSION_FILE}" else echo "${NANO_NAME} (${SVNREVISION})" > "${VERSION_FILE}" fi } customize_cmd save_build configure_pbi_manager() { local sbin links sbin=${NANO_WORLDDIR}/usr/local/sbin/ links="pbi_add pbi_addrepo pbi_browser pbi_autobuild \ pbi_delete pbi_deleterepo pbi_icon pbi_info pbi_indextool \ pbi_listrepo pbi_makepatch pbi_makeport pbi_makerepo \ pbi_metatool pbi_patch pbi_update pbi_update_hashdir \ pbid pbi-crashhandler" cp ${sbin}/pbi-manager ${sbin}/pbi_create for l in ${links} do ln -f ${sbin}/pbi_create ${sbin}/${l} done rm ${sbin}/pbi-manager } customize_cmd configure_pbi_manager last_orders() { local full_image gui_upgrade full_image="$NANO_DISKIMGDIR/$NANO_IMGNAME.Full_Install" gui_upgrade="$NANO_DISKIMGDIR/$NANO_IMGNAME.GUI_Upgrade" if $do_image && $do_copyout_partition; then # NOTE: keep in synch with create_*_diskimage. mv "$NANO_DISKIMGDIR/_.disk.image" "$gui_upgrade" xz --verbose -9 -f "$gui_upgrade" fi if $do_image; then # NOTE: keep in synch with create_iso.sh. mv "$NANO_DISKIMGDIR/$NANO_IMGNAME" "$full_image" xz --verbose -9 -f "$full_image" # GO ISO GO! sh "$FREENAS_ROOT/build/create_iso.sh" fi }