#!/bin/sh # install : this script installs new packages from Jlime repository # It is part of Jlime project # # This is a script to avoid (workaround) the opkg problems with memory. # Long story short: opkg with a huge repository (jlime has 15000 packages) # fails if it does not have swap. For many reasons. # This script does not need swap and it is faster than opkg. pkg_files="`find /var/lib/opkg/ -type f`" # pkg_files="packages-mipsel" pkg_file="/tmp/pkg_file.$$" DEPEN="" DTEMP="/var/lib/opkg-dirtemp.$$" list_add(){ LISTT=$LISTT" `echo $1 | sed 's/, /\n/g' |sed 's/([^(]\+)$//g'`" LISTT=`echo $LISTT | sed "s/ /\n/g" | sort -u ` } next_pkg(){ if [ -n "$LISTT" ]; then LISTT=`echo $LISTT | sed "s/ /\n/g" | grep -v ^"$1"$ ` pkg=`echo $LISTT | sed "s/ /\n/g" | head -1` echo $DEPEN | sed "s/ /\n/g" | grep ^${pkg}$ > /dev/null && next_pkg "$pkg" echo $INSTALLED | sed "s/ /\n/g" | grep ^${pkg}$ > /dev/null && next_pkg "$pkg" echo -n "." else pkg="" fi } case $# in 2) pkg="$2"; case $1 in "install") echo " Getting installed packages list... (wait a while)" INSTALLED=`opkg list-installed | sed -e "s/ .*$//"` # INSTALLED=`cat i | sed -e "s/ .*$//"` # Check if the package is already installed echo $INSTALLED | sed "s/ /\n/g" | grep ^${pkg}$ && echo "- the package is already installed." && exit 0 echo "Shrinking packages DB... (wait a while, around 30 seconds)" cat $pkg_files | sed -n '/^Package/p;/^Filename/p;/^Depends/p' > /tmp/pkg_file.$$ # sed -n '/^Package/p;/^Filename/p;/^Depends/p' $pkg_file1 > /tmp/pkg_file.$$ # Check if the package is already installed if !( grep "^Package: ${pkg}$" /tmp/pkg_file.$$ ) ; then echo " - the package does not exist." exit 1 fi echo -n "Getting dependences : " while [ -n "$pkg" ]; do DEPEN=$DEPEN" $pkg" dep=` grep -m 1 -A 1 "^Package: ${pkg}$" $pkg_file | grep Depends: | sed -e "s/Depends: //"` if [ -n "$dep" ]; then list_add "$dep" fi next_pkg "$pkg" done mkdir $DTEMP PWD=`pwd` cd $DTEMP for i in `echo $DEPEN`; do FN=`cat $pkg_files | grep -m 1 "Filename: ${i}_" | sed -e "s/^.* //"` echo -n " Getting ${FN} :" for j in `grep "^src " /etc/opkg/opkg.conf | sed -e "s/^src.* http:/http:/"`; do echo -n " ..trying.." wget -q ${j}${FN} && break done if [ ! -f ${FN} ] ; then echo "FAILED. Aborting.." exit 1 else echo -n " Done." fi done echo " Installing : " mv /var/lib/opkg/* $DTEMP opkg install *.ipk rm *.ipk mv ${DTEMP}/* /var/lib/opkg/ cd $PWD rm -rf $DTEMP ;; # "-f") # for i in `cat /tmp/depend.$$`; do # sed -n "/^Package: ${i}$/,/^Priority:/s/^Filename: //p" $pkg_file # done # ;; "search") echo " Looking ${pkg}... (wait a while)" cat /var/lib/opkg/* | egrep "Package:|Description:|Section:" | sed -e N -e "s/\n/ /" -e N -e "s/\n/ /" | grep -i ${pkg} | sed -e "s/Package: //" -e "s/Description:/:/" -e "s/Section:/ - section/" ;; "remove") echo " Removing ${pkg}... (wait a while)" opkg remove ${pkg} ;; *) printf "Usage: $0 update $0 install $0 remove $0 search \n";; esac;; 1) case $1 in "update") mkdir $DTEMP PWD=`pwd` cd $DTEMP for j in `grep "^src " /etc/opkg/opkg.conf | sed -e "s/^src.* http:/http:/"`; do D=`echo ${j}| sed -e "s/\/$//" -e "s/^.*\///"` echo "Downloading ${j}Packages.." wget -q ${j}Packages -O packages-${D} done mv packages-* /var/lib/opkg/ cd $PWD rm -rf $DTEMP ;; esac ;; *) printf "Usage: $0 update $0 install $0 remove $0 search \n";; #*) printf "Usage: $0 -f|-l package_name\n";; esac [[ -f /tmp/depend.$$ ]] && rm /tmp/depend.$$ [[ -f /tmp/temp.$$ ]] && rm /tmp/temp.$$ [[ -f /tmp/pkg_file.$$ ]] && rm /tmp/pkg_file.$$