Platform detection



  • Currently pfSense detects which platform it is on using the file /etc/platform:

    
    # Set our operating platform
    PLATFORM=`cat /etc/platform`
    
    HOME=/
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
    export HOME PATH
    
    # Set our current version
    version=`cat /etc/version`
    
    echo
    cat /etc/ascii-art/pfsense-logo-small.txt
    echo
    echo
    echo "Welcome to pfSense ${version} on the '${PLATFORM}' platform..."
    echo
    
    if [ "$PLATFORM" = "cdrom" ]; then
    	/etc/rc.cdrom
    fi
    
    if [ "$PLATFORM" = "embedded" ]; then
    	/etc/rc.embedded
    fi
    
    

    However this requires a separate images to be generated for each version, an alternative is to just generate different kernels and then use the kernel ident to define the platform.  i.e.

    
    ident=`uname -i`
    
    # detect platform
    case "$ident" in
    *-embedded*)    platform=embedded ;;
    *)              platform=cdrom ;;
    esac
    
    # detect developer status
    case "$ident" in
    *DEV)           developer=true ;;
    esac
    
    echo "platform: $platform"
    echo "developer: $developer"
    
    


  • This is a interesting idea but will not work for all cases.

    Case in point, a lot of people like to run a full installation on a WRAP + Microdrive.  Using this method would not allow the user to override the settings.



  • I think this problem is similar to how to deal with JavaScript in web pages.  The preferred method should not be to detect the platform but to detect the features.  For instance ask what are the real reasons for requiring a platform tag?  The main ones are for the kernel and for system upgrades.  Both of these are available with the kernel ident.  For other situations where the platform tag is used they can be replaced by feature detection.  For example /dev/ttyv0 does not exist on embedded platforms, and /dev/ttyd0 will not exist on strange platforms without a serial port.  CD-ROM based environments can be detected because the root file system is a cd9660 mount point, NFS debug environments can be detected similarly, and HDD/CF installs will have a /dev/ufs GEOM label root fs.


Locked