On Friday 04 March 2011 03:41:56 Rob Landley wrote:
> Don't #ifdef ANDROID and hardwire in various random strings.  Make the
> string a config symbol with a sane default, and let people set it in
> their config.  (If you'd like to suggest a few in the help text, fine.
> But I don't find the fact that Busybox is getting more brittle with time
> to be a comforting trend.)
> 
> Rob

Hi,
this could be easily fixed without code changes:

1) substitute /system/bin/sh with a busybox build with only ash enabled

2) or mount bind it at boot time 
        if [ -e /system/xbin/busybox ] ; then
                mount --bind /system/xbin/sh /system/bin/sh;
        fi;

More in general to add a compatibility layer for real linux, scripts can be 
used,
but this is stuff for android forums ;-).

Ciao,
Tito

------------------------------------------------------------------------------------------------------------------------
#!/system/bin/sh
#
# (C) 2009 - 2010 [email protected]
#
SYSTEM_BUILD_PROP="/system/build.prop"
SD_PATH="/sd-ext";

# Modify the system - set rw
mount -o remount,rw /dev/mtdblock3 /system;
mount -o remount,rw /dev/rootfs /;

if [ `grep -c "^/dev/block/mmcblk0p2 $SD_PATH " /proc/mounts` -eq 1 ] ; then
        # Prepare dir and link for overriding system binaries
        mkdir /usr;
        chown root.root /usr;
        chmod 755 /usr;
        if [ ! -e $SD_PATH/bin ] ; then
                mkdir $SD_PATH/bin;
        fi;
        chown root.shell $SD_PATH/bin;
        chmod 755 $SD_PATH/bin;
        busybox ln -s $SD_PATH/bin /usr/bin;

        # Prepare dir for additional libs
        if [ ! -e $SD_PATH/lib ] ; then
                mkdir $SD_PATH/lib;
        fi;
        chown root.shell $SD_PATH/lib;
        chmod 755 $SD_PATH/lib;
        busybox ln -s $SD_PATH/lib /usr/lib;

        find $SD_PATH/lib/ -name *.so | while read line ; do
                name=`basename $line`;
                busybox ln -s $line /system/lib/$name;
        done;

        # Prepare fake home dir
        if [ ! -e $SD_PATH/home ] ; then
                mkdir $SD_PATH/home;
                chown root.root $SD_PATH/home;
                chmod 755 $SD_PATH/home;
        fi;
        busybox ln -s $SD_PATH/home /home;
        busybox ln -s /system/lib /lib  
        # Use ash as default shell
        if [ -e /usr/bin/busybox ] ; then
                mount --bind /usr/bin/sh /system/bin/sh;
        fi;

        # Setup fstab, mtab, passwd and group files
        if [ ! -e $SD_PATH/etc ] ; then
                mkdir $SD_PATH/etc;
        fi;
        chmod 644 $SD_PATH/etc;
        chown root.root $SD_PATH/etc;
        chown root.root $SD_PATH/etc/passwd;
        chown root.root $SD_PATH/etc/group;
        chown root.root $SD_PATH/etc/shadow;
        chown root.root $SD_PATH/etc/gshadow;
        chown root.root $SD_PATH/etc/fstab;
        chown root.root $SD_PATH/etc/shells;
        chown root.root $SD_PATH/etc/profile;
        chmod 644 $SD_PATH/etc/passwd;
        chmod 644 $SD_PATH/etc/group;
        chmod 600 $SD_PATH/etc/shadow;
        chmod 600 $SD_PATH/etc/gshadow;
        chmod 644 $SD_PATH/etc/shells;
        chmod 644 $SD_PATH/etc/profile;
        if [ ! -e /etc/fstab ] ;        then
                busybox ln -s $SD_PATH/etc/fstab /etc/fstab;
        fi;
        chmod 644 $SD_PATH/etc/fstab;
        busybox ln -s $SD_PATH/etc/passwd  /etc/passwd;
        busybox ln -s $SD_PATH/etc/shadow  /etc/shadow;
        busybox ln -s $SD_PATH/etc/group   /etc/group;
        busybox ln -s $SD_PATH/etc/gshadow /etc/gshadow;
        busybox ln -s $SD_PATH/etc/shells  /etc/shells;
        busybox ln -s $SD_PATH/etc/profile /etc/profile;
        if [ ! -e /etc/mtab ] ;         then
                busybox ln -s /proc/mounts /etc/mtab;
        fi;
fi;

# Fix scripts in /system/bin needed by busybox ash
for i in am ime input monkey pm svc;
do
        if [ `grep -c "#!/system/bin/sh" /system/bin/$i` -eq 0 ] ;      then
                echo "#!/system/bin/sh" > /system/bin/$i.tmp;
                cat /system/bin/$i >> /system/bin/$i.tmp;
                mv /system/bin/$i.tmp /system/bin/$i;
                chown root.shell /system/bin/$i;
                chmod 755 /system/bin/$i;
        fi;
done;

# Setup resolv.conf, needed by ping
if [ `grep -c "208.67.222.222" /etc/resolv.conf` -eq 0 ] ; then
        echo "nameserver 208.67.222.222" > /etc/resolv.conf;
        echo "nameserver 208.67.220.220" >> /etc/resolv.conf;
        setprop net.dns1 208.67.222.222;
        setprop net.dns2 208.67.220.220;
fi;

# Device compatibility
for i in 0 1 2 3 4 5 6 7;
do
        busybox ln -s /dev/block/loop$i /dev/loop$i;
done;

# Clean up /system/etc/hosts file - paranoia
echo "127.0.0.1               localhost" > /system/etc/hosts

# Use our own host file as default
if [ -e /sd-ext/etc/hosts ] ; then
        mount --bind /sd-ext/etc/hosts /system/etc/hosts;
fi;

# Remount all ro 
mount -o remount,ro /dev/rootfs /;
mount -o remount,ro /dev/mtdblock3 /system;

exit 0;

------------------------------------------------------------------------------------------------------------------------
 
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to