#!/bin/sh 
 | 
# 
 | 
# Copyright 2007 Openedhand Ltd. 
 | 
# 
 | 
# Author: Richard Purdie <rpurdie@openedhand.com> 
 | 
# 
 | 
  
 | 
# The following script will run all the scriptlets found in #SYSCONFDIR#/deb-postinsts, 
 | 
# #SYSCONFDIR#/ipk-postinsts or #SYSCONFDIR#/rpm-postinsts or the package manager in 
 | 
# case available. 
 | 
  
 | 
# the order of this list is important, do not change! 
 | 
backend_list="rpm deb ipk" 
 | 
  
 | 
pm_installed=false 
 | 
  
 | 
for pm in $backend_list; do 
 | 
    # found the package manager, it has postinsts 
 | 
    case $pm in 
 | 
        "deb") 
 | 
            if [ -s "#LOCALSTATEDIR#/lib/dpkg/status" ]; then 
 | 
                pm_installed=true 
 | 
                break 
 | 
            fi 
 | 
            ;; 
 | 
  
 | 
        "ipk") 
 | 
            if [ -s "#LOCALSTATEDIR#/lib/opkg/status" ]; then 
 | 
                pm_installed=true 
 | 
                break 
 | 
            fi 
 | 
            ;; 
 | 
    esac 
 | 
  
 | 
    pi_dir="#SYSCONFDIR#/$pm-postinsts" 
 | 
  
 | 
    # found postinsts directory 
 | 
    if [ -d $pi_dir ]; then 
 | 
        break 
 | 
    fi 
 | 
done 
 | 
  
 | 
remove_rcsd_link () { 
 | 
    if [ -n "`which update-rc.d`" ]; then 
 | 
        update-rc.d -f run-postinsts remove 
 | 
    fi 
 | 
} 
 | 
  
 | 
if ! [ -d $pi_dir ] && ! $pm_installed; then 
 | 
    remove_rcsd_link 
 | 
    exit 0 
 | 
fi 
 | 
  
 | 
echo "Configuring packages on first boot...." 
 | 
echo " (This may take several minutes. Please do not power off the machine.)" 
 | 
  
 | 
[ -e #SYSCONFDIR#/default/postinst ] && . #SYSCONFDIR#/default/postinst 
 | 
  
 | 
if [ "$POSTINST_LOGGING" = "1" ]; then 
 | 
    rm -f $LOGFILE 
 | 
    append_log=">>$LOGFILE 2>&1" 
 | 
fi 
 | 
  
 | 
exec_postinst_scriptlets() { 
 | 
    for i in `ls $pi_dir`; do 
 | 
        i=$pi_dir/$i 
 | 
        echo "Running postinst $i..." 
 | 
        [ "$POSTINST_LOGGING" = "1" ] && eval echo "Running postinst $i..." $append_log 
 | 
        if [ -x $i ]; then 
 | 
            (sh -c $i $append_log) 
 | 
            rm $i 
 | 
        else 
 | 
            echo "ERROR: postinst $i failed." 
 | 
            [ "$POSTINST_LOGGING" = "1" ] && eval echo "ERROR: postinst $i failed." $append_log 
 | 
            remove_rcsd_link=0 
 | 
        fi 
 | 
    done 
 | 
} 
 | 
  
 | 
remove_rcsd_link=1 
 | 
if $pm_installed; then 
 | 
    case $pm in 
 | 
        "ipk") 
 | 
            eval opkg configure $append_log 
 | 
            ;; 
 | 
  
 | 
        "deb") 
 | 
            eval dpkg --configure -a $append_log 
 | 
            ;; 
 | 
    esac 
 | 
else 
 | 
    exec_postinst_scriptlets 
 | 
fi 
 | 
  
 | 
# since all postinstalls executed successfully, remove the rcS.d link 
 | 
if [ $remove_rcsd_link = 1 ]; then 
 | 
    remove_rcsd_link 
 | 
fi 
 |