printf "%0${retlen}x" "$ret"
}
+data_2bin() {
+ local data=$1
+ local len=${#1}
+ local bin_data
+
+ for i in $(seq 0 2 $(($len - 1))); do
+ bin_data="${bin_data}\x${data:i:2}"
+ done
+
+ echo -ne $bin_data
+}
+
+data_2xor_val() {
+ local data=$1
+ local len=${#1}
+ local xor_data
+
+ for i in $(seq 0 4 $(($len - 1))); do
+ xor_data="${xor_data}${data:i:4} "
+ done
+
+ echo -n ${xor_data:0:-1}
+}
+
append() {
local var="$1"
local value="$2"
eval "export ${NO_EXPORT:+-n} -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\""
}
+prepend() {
+ local var="$1"
+ local value="$2"
+ local sep="${3:- }"
+
+ eval "export ${NO_EXPORT:+-n} -- \"$var=\$value\${$var:+\${sep}\${$var}}\""
+}
+
list_contains() {
local var="$1"
local str="$2"
default_prerm() {
local root="${IPKG_INSTROOT}"
- local pkgname="$(basename ${1%.*})"
+ [ -z "$pkgname" ] && local pkgname="$(basename ${1%.*})"
local ret=0
+ local filelist="${root}/usr/lib/opkg/info/${pkgname}.list"
+ [ -f "$root/lib/apk/packages/${pkgname}.list" ] && filelist="$root/lib/apk/packages/${pkgname}.list"
if [ -f "$root/usr/lib/opkg/info/${pkgname}.prerm-pkg" ]; then
( . "$root/usr/lib/opkg/info/${pkgname}.prerm-pkg" )
fi
local shell="$(command -v bash)"
- for i in $(grep -s "^/etc/init.d/" "$root/usr/lib/opkg/info/${pkgname}.list"); do
+ for i in $(grep -s "^/etc/init.d/" "$filelist"); do
if [ -n "$root" ]; then
${shell:-/bin/sh} "$root/etc/rc.common" "$root$i" disable
else
}
add_group_and_user() {
- local pkgname="$1"
+ [ -z "$pkgname" ] && local pkgname="$(basename ${1%.*})"
local rusers="$(sed -ne 's/^Require-User: *//p' $root/usr/lib/opkg/info/${pkgname}.control 2>/dev/null)"
+ if [ -f "$root/lib/apk/packages/${pkgname}.rusers" ]; then
+ local rusers="$(cat $root/lib/apk/packages/${pkgname}.rusers)"
+ fi
if [ -n "$rusers" ]; then
local tuple oIFS="$IFS"
fi
}
+update_alternatives() {
+ local root="${IPKG_INSTROOT}"
+ local action="$1"
+ local pkgname="$2"
+
+ if [ -f "$root/lib/apk/packages/${pkgname}.alternatives" ]; then
+ for pkg_alt in $(cat $root/lib/apk/packages/${pkgname}.alternatives); do
+ local best_prio=0;
+ local best_src="/bin/busybox";
+ pkg_prio=${pkg_alt%%:*};
+ pkg_target=${pkg_alt#*:};
+ pkg_target=${pkg_target%:*};
+ pkg_src=${pkg_alt##*:};
+
+ if [ -e "$root/$target" ]; then
+ for alts in $root/lib/apk/packages/*.alternatives; do
+ for alt in $(cat $alts); do
+ prio=${alt%%:*};
+ target=${alt#*:};
+ target=${target%:*};
+ src=${alt##*:};
+
+ if [ "$target" = "$pkg_target" ] &&
+ [ "$src" != "$pkg_src" ] &&
+ [ "$best_prio" -lt "$prio" ]; then
+ best_prio=$prio;
+ best_src=$src;
+ fi
+ done
+ done
+ fi
+ case "$action" in
+ install)
+ if [ "$best_prio" -lt "$pkg_prio" ]; then
+ ln -sf "$pkg_src" "$root/$pkg_target"
+ echo "add alternative: $pkg_target -> $pkg_src"
+ fi
+ ;;
+ remove)
+ if [ "$best_prio" -lt "$pkg_prio" ]; then
+ ln -sf "$best_src" "$root/$pkg_target"
+ echo "add alternative: $pkg_target -> $best_src"
+ fi
+ ;;
+ esac
+ done
+ fi
+}
+
default_postinst() {
local root="${IPKG_INSTROOT}"
- local pkgname="$(basename ${1%.*})"
- local filelist="/usr/lib/opkg/info/${pkgname}.list"
+ [ -z "$pkgname" ] && local pkgname="$(basename ${1%.*})"
+ local filelist="${root}/usr/lib/opkg/info/${pkgname}.list"
+ [ -f "$root/lib/apk/packages/${pkgname}.list" ] && filelist="$root/lib/apk/packages/${pkgname}.list"
local ret=0
- add_group_and_user "${pkgname}"
+ if [ -e "${root}/usr/lib/opkg/info/${pkgname}.list" ]; then
+ filelist="${root}/usr/lib/opkg/info/${pkgname}.list"
+ add_group_and_user "${pkgname}"
+ fi
- if [ -f "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ]; then
- ( . "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" )
- ret=$?
+ if [ -e "${root}/lib/apk/packages/${pkgname}.list" ]; then
+ filelist="${root}/lib/apk/packages/${pkgname}.list"
+ update_alternatives install "${pkgname}"
fi
if [ -d "$root/rootfs-overlay" ]; then
rm -f /tmp/luci-indexcache
fi
+ if [ -f "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ]; then
+ ( . "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" )
+ ret=$?
+ fi
+
local shell="$(command -v bash)"
- for i in $(grep -s "^/etc/init.d/" "$root$filelist"); do
+ for i in $(grep -s "^/etc/init.d/" "$filelist"); do
if [ -n "$root" ]; then
${shell:-/bin/sh} "$root/etc/rc.common" "$root$i" enable
else
done
}
+ipcalc() {
+ set -- $(ipcalc.sh "$@")
+ [ $? -eq 0 ] && export -- "$@"
+}
+
find_mtd_index() {
local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')"
local INDEX="${PART##mtd}"
return
fi
gids=$(cut -d: -f3 ${IPKG_INSTROOT}/etc/group)
- gid=65536
+ gid=32768
while echo "$gids" | grep -q "^$gid$"; do
gid=$((gid + 1))
done
echo "$grp" | grep -q ":$" && delim=""
[ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd
sed -i "s/$grp/$grp$delim$2/g" ${IPKG_INSTROOT}/etc/group
- selinuxenabled 2>/dev/null && restorecon /etc/group
+ if [ -z "$IPKG_INSTROOT" ] && [ -x /usr/sbin/selinuxenabled ] && selinuxenabled; then
+ restorecon /etc/group
+ fi
[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd
}
local rc
[ -z "$uid" ] && {
uids=$(cut -d: -f3 ${IPKG_INSTROOT}/etc/passwd)
- uid=65536
+ uid=32768
while echo "$uids" | grep -q "^$uid$"; do
uid=$((uid + 1))
done
done
}
-[ -z "$IPKG_INSTROOT" ] && [ -f /lib/config/uci.sh ] && . /lib/config/uci.sh
+[ -z "$IPKG_INSTROOT" ] && [ -f /lib/config/uci.sh ] && . /lib/config/uci.sh || true