#!/bin/sh # # Copyright 2007 Openedhand Ltd. # # Author: Richard Purdie # # 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